﻿using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/*  静态类一般用于  工具类
 *  1、 const
 *             在类内要声明const常量
 *             (1)外部访问时 必须通过类名进行访问
 *            （2）只能在声明时初始化，不允许在其他地方初始化；
 *            （3）在某种程度 被const 修饰的变量（常量） 不可变值
 *  2、 readonly
 *              （1） readonly const不可修饰同个数据类型
 *               (2)  readonly 必须是类的实例 进行访问,但不可修改数值
 *              （3）readonly初始化只能在构造函数和声明中
 *              （4）  
 *  3、 变量访问修饰符的控制
 *           (1) 通过访问修饰符构成的语法快 来实现外部只读的效果
 *           
 *  
 *  4、静态构造函数
 *                  （1） 静态构造修饰符，不需要增加访问修饰符
 *                  （2） 静态构造函数 无论多少次实例  都只被系统自动调用一次
 *  5、静态类          
 *                  （1）静态类不允许有实例构造函数  只允许存在一个静态构造函数（经测试 并不会执行）
 *                  （2）静态类不允许被实例化
 *                  （3）静态类的成员  必须是静态成员/常量
 *                  （4） 静态类无法作为基类派生
 */
public static class MyClass3
{
    public static int Add(int a,int b)
    {
        return a + b;
    }
}
public class MyClass2
{
    public const int mValue=20;
    public readonly  int mValue2 = 20;

    private int m_Value4;
    public int mValue4
    {
        get
        {
            return m_Value4;
        }
        set
        {
            m_Value4 = value;
        }
    }

    public MyClass2()
    {
     
    }

    public int mValue3 
    { 
        get; 
        private set; 
    }
}
public class staticClass : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        // MyClass2 myClass2 = new MyClass2();
        // int a= MyClass2.mValue;
        // int b = myClass2.mValue2;
        //int c= myClass2.mValue3;

        //MyClass3 myClass3 = new MyClass3();

        Debug.Log(MyClass3.Add(1, 2));
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}
